Rename the GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
authorOwen Taylor <otaylor@redhat.com>
Mon, 19 Nov 2001 01:08:51 +0000 (01:08 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Mon, 19 Nov 2001 01:08:51 +0000 (01:08 +0000)
Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>

* gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
GTK_OBJECT_DESTROYED() check macro.

* gtk/gtkbindings.c (gtk_bindings_activate): Remove
instances of GTK_OBJECT_DESTROYED() that weren't
needed any more.

* gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
for a connection to ::destroy.

12 files changed:
ChangeLog
ChangeLog.pre-2-0
ChangeLog.pre-2-10
ChangeLog.pre-2-2
ChangeLog.pre-2-4
ChangeLog.pre-2-6
ChangeLog.pre-2-8
docs/Changes-2.0.txt
gtk/gtkbindings.c
gtk/gtkdialog.c
gtk/gtkobject.c
gtk/gtkobject.h

index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index c5fd2f0f1c54a3f5b174ca36e0769272cbad6ae7..fe6716b28c5178a7e7af7df4c1de76b67627b985 100644 (file)
@@ -1,3 +1,16 @@
+Sun Nov 18 19:47:29 2001  Owen Taylor  <otaylor@redhat.com>
+
+       * gtk/gtkobject.h docs/Changes-2.0.txt: Rename the
+       GTK_DESTROYED flag to GTK_IN_DESTRUCTION, remove the
+       GTK_OBJECT_DESTROYED() check macro.
+
+       * gtk/gtkbindings.c (gtk_bindings_activate): Remove
+       instances of GTK_OBJECT_DESTROYED() that weren't
+       needed any more.
+
+       * gtk/gtkdialog.c: Exchange use of GTK_OBJECT_DESTROYED
+       for a connection to ::destroy.
+
 Sun Nov 18 18:18:11 2001  Owen Taylor  <otaylor@redhat.com>
 
        * gtk/gtkfixed.c: Make a NO_WINDOW widget, as it should
index 1c8e8cfddd9020d3b7f4f7b42d2519e669eb2e43..fb0c73227989e83352551bec78153ac7fa16129f 100644 (file)
@@ -116,6 +116,12 @@ Incompatible Changes from GTK+-1.2 to GTK+-2.0:
     have to be moved into the ::destroy implementations. The reason for doing
     this is that all object reference cycles should be broken at destruction 
     time.
+
+    Because the ::destroy signal can be emitted multiple times, it no longer
+    makes sense to check if a widget has been destroyed using the 
+    GTK_OBJECT_DESTROYED() macro, and this macro has been removed. If 
+    catching destruction is still needed, it can be done with a signal
+    connection to ::destroy.
     
 * Signal system changes:
   The Gtk 2.0 signal merly proxies the GSignal system now.
index 902410e11989a805fe9d0a973ef7ae981096f8c6..30cb56d28ecb93f163e6cadb78c8aca8efe6d477 100644 (file)
@@ -414,7 +414,7 @@ gtk_binding_entry_activate (GtkBindingEntry *entry,
       gtk_signal_emitv (object, signal_id, params);
       g_free (params);
       
-      if (GTK_OBJECT_DESTROYED (object) || entry->destroyed)
+      if (entry->destroyed)
        break;
     }
   
@@ -504,15 +504,12 @@ gtk_binding_set_activate (GtkBindingSet    *binding_set,
   keyval = gdk_keyval_to_lower (keyval);
   modifiers = modifiers & BINDING_MOD_MASK ();
   
-  if (!GTK_OBJECT_DESTROYED (object))
+  entry = binding_ht_lookup_entry (binding_set, keyval, modifiers);
+  if (entry)
     {
-      entry = binding_ht_lookup_entry (binding_set, keyval, modifiers);
-      if (entry)
-       {
-         gtk_binding_entry_activate (entry, object);
-         
-         return TRUE;
-       }
+      gtk_binding_entry_activate (entry, object);
+      
+      return TRUE;
     }
   
   return FALSE;
@@ -887,7 +884,7 @@ gtk_bindings_activate (GtkObject      *object,
   g_return_val_if_fail (object != NULL, FALSE);
   g_return_val_if_fail (GTK_IS_OBJECT (object), FALSE);
 
-  if (!GTK_IS_WIDGET (object) || GTK_OBJECT_DESTROYED (object))
+  if (!GTK_IS_WIDGET (object))
     return FALSE;
 
   widget = GTK_WIDGET (object);
index b914211f3af0dccbeeb7a990b64cf3696f5f3596..3e32c444316d1b2b7005b666d8ba394ab60a95ce 100644 (file)
@@ -770,6 +770,7 @@ typedef struct
   GtkDialog *dialog;
   gint response_id;
   GMainLoop *loop;
+  gboolean destroyed;
 } RunInfo;
 
 static void
@@ -813,6 +814,16 @@ run_delete_handler (GtkDialog *dialog,
   return TRUE; /* Do not destroy */
 }
 
+static void
+run_destroy_handler (GtkDialog *dialog, gpointer data)
+{
+  RunInfo *ri = data;
+
+  /* shutdown_loop will be called by run_unmap_handler */
+  
+  ri->destroyed = TRUE;
+}
+
 /**
  * gtk_dialog_run:
  * @dialog: a #GtkDialog
@@ -861,6 +872,7 @@ gtk_dialog_run (GtkDialog *dialog)
   RunInfo ri = { NULL, GTK_RESPONSE_NONE, NULL };
   gboolean was_modal;
   guint response_handler;
+  guint unmap_handler;
   guint destroy_handler;
   guint delete_handler;
   
@@ -881,7 +893,7 @@ gtk_dialog_run (GtkDialog *dialog)
                         GTK_SIGNAL_FUNC (run_response_handler),
                         &ri);
   
-  destroy_handler =
+  unmap_handler =
     gtk_signal_connect (GTK_OBJECT (dialog),
                         "unmap",
                         GTK_SIGNAL_FUNC (run_unmap_handler),
@@ -893,6 +905,12 @@ gtk_dialog_run (GtkDialog *dialog)
                         GTK_SIGNAL_FUNC (run_delete_handler),
                         &ri);
   
+  destroy_handler =
+    gtk_signal_connect (GTK_OBJECT (dialog),
+                        "destroy",
+                        GTK_SIGNAL_FUNC (run_destroy_handler),
+                        &ri);
+  
   ri.loop = g_main_new (FALSE);
 
   GDK_THREADS_LEAVE ();  
@@ -902,22 +920,20 @@ gtk_dialog_run (GtkDialog *dialog)
   g_main_loop_unref (ri.loop);
 
   ri.loop = NULL;
+  ri.destroyed = FALSE;
   
-  if (!GTK_OBJECT_DESTROYED (dialog))
+  if (!ri.destroyed)
     {
       if (!was_modal)
         gtk_window_set_modal (GTK_WINDOW(dialog), FALSE);
       
-      gtk_signal_disconnect (GTK_OBJECT (dialog), destroy_handler);
       gtk_signal_disconnect (GTK_OBJECT (dialog), response_handler);
+      gtk_signal_disconnect (GTK_OBJECT (dialog), unmap_handler);
       gtk_signal_disconnect (GTK_OBJECT (dialog), delete_handler);
+      gtk_signal_disconnect (GTK_OBJECT (dialog), destroy_handler);
     }
 
   gtk_object_unref (GTK_OBJECT (dialog));
 
   return ri.response_id;
 }
-
-
-
-
index 483a00e95cc52a270202e57c4ecfa7e059e970fc..0c47368369bab3da101c5f9397414a3b4e9e5d1c 100644 (file)
@@ -354,8 +354,8 @@ gtk_object_destroy (GtkObject *object)
   g_return_if_fail (object != NULL);
   g_return_if_fail (GTK_IS_OBJECT (object));
   
-  if (!GTK_OBJECT_DESTROYED (object))
-      g_object_run_dispose (G_OBJECT (object));
+  if (!(GTK_OBJECT_FLAGS (object) & GTK_IN_DESTRUCTION))
+    g_object_run_dispose (G_OBJECT (object));
 }
 
 static void
@@ -366,13 +366,13 @@ gtk_object_dispose (GObject *gobject)
   /* guard against reinvocations during
    * destruction with the GTK_DESTROYED flag.
    */
-  if (!GTK_OBJECT_DESTROYED (object))
+  if (!(GTK_OBJECT_FLAGS (object) & GTK_IN_DESTRUCTION))
     {
-      GTK_OBJECT_SET_FLAGS (object, GTK_DESTROYED);
+      GTK_OBJECT_SET_FLAGS (object, GTK_IN_DESTRUCTION);
       
       gtk_signal_emit (object, object_signals[DESTROY]);
       
-      GTK_OBJECT_UNSET_FLAGS (object, GTK_DESTROYED);
+      GTK_OBJECT_UNSET_FLAGS (object, GTK_IN_DESTRUCTION);
     }
 
   G_OBJECT_CLASS (parent_class)->dispose (gobject);
index 9f1ce101801ebe8ed697df5e4e94096dcefb7c4f..f025a4d41d0a06bbde76fb2922a294d49f1fed75 100644 (file)
@@ -57,7 +57,7 @@ G_BEGIN_DECLS
  */
 typedef enum
 {
-  GTK_DESTROYED                = 1 << 0,
+  GTK_IN_DESTRUCTION   = 1 << 0, /* Used internally during dispose */
   GTK_FLOATING         = 1 << 1,
   GTK_RESERVED_1       = 1 << 2,
   GTK_RESERVED_2       = 1 << 3
@@ -66,7 +66,6 @@ typedef enum
 /* Macros for extracting the object_flags from GtkObject.
  */
 #define GTK_OBJECT_FLAGS(obj)            (GTK_OBJECT (obj)->flags)
-#define GTK_OBJECT_DESTROYED(obj)        ((GTK_OBJECT_FLAGS (obj) & GTK_DESTROYED) != 0)
 #define GTK_OBJECT_FLOATING(obj)         ((GTK_OBJECT_FLAGS (obj) & GTK_FLOATING) != 0)
 #define GTK_OBJECT_CONNECTED(obj)        ((GTK_OBJECT_FLAGS (obj) & GTK_CONNECTED) != 0)